]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
screenShield: Add API to add/remove credential managers
authorAlessandro Bono <alessandro.bono369@gmail.com>
Wed, 3 Aug 2022 13:43:51 +0000 (15:43 +0200)
committerMarge Bot <marge-bot@gnome.org>
Mon, 23 Jan 2023 20:37:46 +0000 (20:37 +0000)
Extensions that provide a credential manager can (un)register themself
so that the screen shield gets activated right after a user is
authenticated.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>

js/ui/screenShield.js

index 2cae2732fbdc90e9be311b8fce9fe7a5d043d1ab..6c2fe25c2abbdb28f7c14946c6b77eb5787784a9 100644 (file)
@@ -94,12 +94,8 @@ var ScreenShield = class extends Signals.EventEmitter {
                                                this._activateDialog();
                                        });
 
-        this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
-        this._oVirtCredentialsManager.connect('user-authenticated',
-                                              () => {
-                                                  if (this._isLocked)
-                                                      this._activateDialog();
-                                              });
+        this._credentialManagers = {};
+        this.addCredentialManager(OVirt.SERVICE_NAME, OVirt.getOVirtCredentialsManager());
 
         this._loginManager = LoginManager.getLoginManager();
         this._loginManager.connect('prepare-for-sleep',
@@ -641,6 +637,26 @@ var ScreenShield = class extends Signals.EventEmitter {
         // activate without animation in that case.
     }
 
+    addCredentialManager(serviceName, credentialManager) {
+        if (this._credentialManagers[serviceName])
+            return;
+
+        this._credentialManagers[serviceName] = credentialManager;
+        credentialManager.connectObject('user-authenticated', () => {
+            if (this._isLocked)
+                this._activateDialog();
+        }, this);
+    }
+
+    removeCredentialManager(serviceName) {
+        let credentialManager = this._credentialManagers[serviceName];
+        if (!credentialManager)
+            return;
+
+        credentialManager.disconnectObject(this);
+        delete this._credentialManagers[serviceName];
+    }
+
     lock(animate) {
         if (this._lockSettings.get_boolean(DISABLE_LOCK_KEY)) {
             log('Screen lock is locked down, not locking'); // lock, lock - who's there?